package com.example.demo01;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;

/**
 * @Description : hashmap 扩容因子0.75测试
 * @Author : ZYX
 * @Date : 2022/8/9 10:54
 * @Version : 1.0
 **/
public class HashMapExDemo {

    public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        HashMap<String, String> map = new HashMap<>(16);

        //获取HashMap整个类

        Class<?> mapType = map.getClass();

//获取指定属性，也可以调用getDeclaredFields()方法获取属性数组

        Field threshold = mapType.getDeclaredField("threshold");

//将目标属性设置为可以访问

        threshold.setAccessible(true);

//获取指定方法，因为HashMap没有容量这个属性，但是capacity方法会返回容量值

        Method capacity = mapType.getDeclaredMethod("capacity");

//设置目标方法为可访问

        capacity.setAccessible(true);


        for (int i = 0; i < 12; i++) {
            map.put("key"+i,"value"+i);
        }
        System.out.println("容量："+capacity.invoke(map)+" 阈值："+threshold.get(map)+" 元素数量："+map.size());

        map.put("newp","newpas");

        System.out.println("容量："+capacity.invoke(map)+" 阈值："+threshold.get(map)+" 元素数量："+map.size());

    }

}
